﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;

namespace PostProcGUI.Model.PostProcOtherGroup.Calc
{
    /// <summary>
    /// Собственно интерфейс базиса. 
    /// Отдельно хочу сказать, что между сущностями "сетка" и "базис" существует связь один ко многим. 
    /// При чём сетка для базиса должна быть постоянна на протяжении всей жизни базиса. Как гуисты мы заранее не знаем тип базиса,
    /// на котором было посчитано решение, поэтому для него необходима отдельная фабрика.
    /// По этому сетка присутствует в параметрах конструктора (то есть фабричного метода в BasisFactory)
    /// </summary>
    public interface IBasis
    {
        /// <summary>
        /// Сетка, на которой построен базис. Необходимость данного свойства находится под большим вопросом,
        /// ибо нам как гуистам оно не особо интересено.
        /// </summary>
        IMesh Mesh { get; }

        /// <summary>
        /// Функция возвращает значение в заданной точке
        /// </summary>
        /// <exception cref="???">Если точка за границами области</exception>
        double GetValue(Point point);

        /// <summary>
        /// Функция возвращает производную в заданной точке
        /// </summary>
        /// <exception cref="???">Если точка за границами области</exception>
        double GetDerValue(Point point);

        ///Если надо    IEnumerable<double> GetValueInPoint(IEnumerable<Point> p);
        
        ValueType CurrentValueType { get; set; }
    }
}
